7 février 2020 benzo androïd, chiffrement, linux, raspberry, réseau, sécurité, serveur, vie privée 0
On l’a appris fin janvier, Wireguard VPN va être intégré officiellement au prochain noyau linux. Pour ceux qui ne savent toujours pas de quoi il en retourne c’est par ici. En attendant, pour les autres, les impatients, les geeks, les curieux ou les 3 à la fois, il est temps de tester la bête !! Voici le petit tuto que je vous avais promis la semaine dernière, à savoir :
Comment installer un serveur VPN wireguard sur sa raspberry?
Dans ce tutoriel j’utilise:
– une raspberry 3 avec la distrib raspbian Buster installée (serveur vpn)
– un smartphone android et un pc ubuntu/desktop (clients vpn )
Je pars du principe que vous savez installer,configurer,sécuriser une raspbian , ajouter des règles au niveau du parefeu ,en bon nerd que vous êtes ^_^
Pour l’install et la config du VPN, let’s go!
1 – Installation des paquets
On a le choix entre 2 méthodes :
•.Méthode1: compilation de wireguard à la mano
•.Méthode2: via le dépôt debian (branche « unstable »)
J’ai opté pour la méthode 2 (flemme de recompiler en cas de future maj). Pour la suite des manips, se connecter dans un terminal, avec les superpouvoirs.
– Ajout du dépôt qui va bien sur la raspbian:
echo "deb http://deb.debian.org/debian/ unstable main" > /etc/apt/sources.list.d/unstable.list
-On ajuste la priorité du dépôt « unstable » pour pas tout péter lors de futures maj:
printf 'Package: *\nPin: release a=unstable\nPin-Priority: 90\n' > /etc/apt/preferences.d/limit-unstable
-On met à jour la liste des paquets:
apt update
Ne pas s’inquiéter des quelques messages d’erreurs qui s’affichent. En effet,il manque les signatures du dépôt qui ne peuvent pas être vérifiées pour le moment (GPG error …NO PUBKEY).
-On va y remédier :
apt install dirmngr
apt-key adv --keyserver keyserver.ubuntu.com --recv-keys 7638D0442B90D010
apt-key adv --keyserver keyserver.ubuntu.com --recv-keys 04EE7237B7D453EC
apt update
Enfin , installation des paquets:
apt install wireguard dkms raspberrypi-kernel-headers wireguard-dkms wireguard-tools
Et c’est terminé pour la partie installation des packages!
2 – Générer les clés privées et publiques
Comme pour ssh, on génère une clé publique et une clé privée pour chaque machine (serveur, client1,client2 …)
cd /etc/wireguard ; umask 077
– clés pour le serveur vpn:
wg genkey > server_private.key
wg pubkey > server_public.key < server_private.key
– clés pour le client vpn (tablette, smartphone,pc….)
wg genkey > client1_private.key
wg pubkey > client1_public.key < client1_private.key
3 – Éditer les fichiers de conf :
Donc toujours dans un terminal sur notre raspberry.
– pour le SERVEUR :
nano /etc/wireguard/wg0.conf
-copier/coller les lignes suivantes dans le fichier de conf.
J’ai essayé de commenter un max pour ceux qui ne comprendraient pas bien quelles valeurs sont à modifier en fonction de leur environnement.
[Interface]
# plage d'adresse privée pr le réseau vpn
Address = 10.9.0.1/24
# port d'écoute du serveur vpn
ListenPort = 51820
# @ip du resolveur dns , ici c'est l'@ip de mon pihole
# mais on peut aussi mettre celle d'un public,par ex:1.1.1.1
DNS = 192.168.1.2 # ip du resolveur
# mettre la clé privée de notre serveur (fichier server_private_key)
PrivateKey = VJUUasN+z6hYn4C6xxxxxxxxxxxxxxxx=
# règles de routage
# penser à adapter avec le nom de votre interface reseau (ici eth0)
# au besoin faire un "ip a" pour trouver votre interface
PostUp = iptables -A FORWARD -i %i -j ACCEPT; iptables -A FORWARD -o %i -j ACCEPT; iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE
PostDown = iptables -D FORWARD -i %i -j ACCEPT; iptables -D FORWARD -o %i -j ACCEPT; iptables -t nat -D POSTROUTING -o eth0 -j MASQUERADE
[Peer]
# client1 - telephone android
# contenu de la clé publique (fichier client1_public.key)
PublicKey = bLuMB4ed7txxxxxxxxxxxxxxxxxxxxxxxx
# @ip privée du vpn client
AllowedIPs = 10.9.0.2/32
PersistentkeepAlive = 60
– pour le CLIENT :
On génère ce fichier à partir de notre serveur. Une fois édité, il sera à transféré sur le client (smartphone, pc).
nano /etc/wireguard/wg0-client1.conf
[Interface]
#client 1
# @ip du client
Address = 10.9.0.2/32
# contenu du fichier client1_private_key
PrivateKey = aI2cUEOwaMNjgfdxxxxxxxxxxxxxxxxxxxxxxxxx
[Peer]
#client 1
# contenu du fichier server_public_key
PublicKey = Tzq/nLB07p8GKxxxxxxxxxxxxxxxxxxxxxxxxxxxx
# @ipPubliqueBox:port_vpn,
Endpoint = 82.xx.xx.xxx:51820
AllowedIPs = 0.0.0.0/0
#(si 0.0.0.0/0 alors tout le traffic est routé dans le vpn)
PersistentKeepalive = 25
-Activer le routage des paquets IP sur le rpi:
dans le fichier nano /etc/sysctl.conf
passer la valeur net.ipv4.ip_forward= à 1
Pour les poilus de la main, on peut le faire en une seule ligne de commande :
sed -ir 's/#{1,}?net.ipv4.ip_forward ?= ?(0|1)/net.ipv4.ip_forward = 1/g' /etc/sysctl.conf
On recharge les paramètres du noyau:
systemctl -p /etc/sysctl.conf
Activer l’interface:
wg-quick up wg0
Pour voir le status de la connexion :
wg-quick show wg0
Vérifier le tunnel:
ip a
Pour voir le status de la connexion :
sudo wg
Activer l’interface pour chaque redémarrage:
sudo systemctl enable wg-quick@wg0
4 – Configurer les clients VPN
(téléphone Android ou pc)
selon le système que vous utilisez (android , linux, windows, macOS….) vous aurez toutes les infos détaillées sur la doc officielle pour installer le client wireguard sur votre pc. Sinon, pour ceux qui auraient un téléphone android et/ou ubuntu voilà comment je m’y suis pris:
– télécharger l’application wireguard sur le dépôt libre Fdroïd.
Pour récupérer le fichier de conf sur notre téléphone, on va le faire à partir d’un QR code généré sur notre raspberry .
sudo apt install qrcode
qrencode -t ansiutf8 < /etc/wireguard/wg0-client.conf
Et voilà le joli Qr code correspondant à la conf vpn pour notre téléphone:
Il ne reste plus qu’à scanner et à importer le fichier dans l’appli wireguard installée précédemment sur notre android.
Sur un pc linux (ubuntu)
sudo add-apt-repository ppa:wireguard/wireguard
sudo apt install wireguard
Lancer la connexion vpn:
wg-quick up wg0
Vérifier le statut de la conenxion:
wg-quick status
Enfin, on vérifie qu’on a bien récupéré l’adresse IP publique de notre box:
curl ifconfig.me
Désactiver la connexion vpn:
wg-quick down wg0
Régles du parefeu:
Ne pas oublier d’ajouter une règle pour autoriser la connexion entrante vers le serveur VPN placé derrère votre box:
•.NAT/ portforwarding
•.port udp 51820 vers rpi LAN 192.168.X.X
Quelques infos supplémentaires:
•.Wireguard est encore en phase expérimentale, donc le déployer en prod en contexte entreprise on évite pour le moment hein ! Même si vous êtes bluffé par ses perfs et que vous avez une irrésistible envie de virer openvpn:-)
•.On trouve sur github des scripts d’install auto. J’ai vu que pivpn avait aussi proposé le sien. Ça pourrait être une bonne idée pour ceux qui sont pressés de tester le bouzin vite fait . Mais je déconseille pour du long terme , surtout au vu de la facilité d’install et de config de wireguard.
•.Je mettrai à jour ce tuto régulièrement en fonction des évolutions du projet.
Voilà j’espère que vous aurez réussi à tester wireguard avec succès et que comme moi vous allez apprécier son utilisation au quotidien!